Skip to content

fix: pass --s3-no-head-object to rclone for dataset uploads#146

Merged
pfitzseb merged 1 commit into
mainfrom
la/rclone-no-head-object
Apr 30, 2026
Merged

fix: pass --s3-no-head-object to rclone for dataset uploads#146
pfitzseb merged 1 commit into
mainfrom
la/rclone-no-head-object

Conversation

@lamdor
Copy link
Copy Markdown
Member

@lamdor lamdor commented Apr 29, 2026

rclone v1.72 changed how its S3 backend handles a 403 from the FS-init HeadObject probe (rclone/rclone#8975, commit rclone/rclone@6440052f, 2025-11-18): non-NotFound errors now propagate as fatal NewFs failures instead of being silently treated as "this is a directory".

For BlobTree dataset uploads the platform's session credentials are scoped to <prefix>/<version>/* and HEAD on the bare <version> key is denied — so once Rclone_jll resolved to ≥ v1.72 (currently v1.73.5), every BlobTree upload aborted with JuliaHubError: Data upload failed.

The destination is always a directory in our usage, so the probe serves no purpose; suppress it with --s3-no-head-object.

Verified locally against internal.juliahub.com with Rclone_jll v1.73.5: the live datasets testset now passes end-to-end, where it previously failed at datasets-live.jl:70 (BlobTree upload). The flag has existed in rclone since v1.55 (2021), so no compat impact.

Pairs with JuliaComputing/JuliaHub#22217 (server-side fix that broadens the BlobTree session policy to also authorize the bare <version> key); either alone resolves the failure but together they're defense in depth.

rclone v1.72 changed how its S3 backend handles a 403 from the FS-init
HeadObject probe (rclone/rclone#8975, commit rclone/rclone@6440052f,
2025-11-18): non-NotFound errors now propagate as fatal NewFs failures
instead of being silently treated as "this is a directory". For BlobTree
dataset uploads the platform's session credentials are scoped to
<prefix>/<version>/* and HEAD on the bare <version> key is denied — so
once Rclone_jll resolved to >= v1.72 (currently v1.73.5), every BlobTree
upload aborted with `JuliaHubError: Data upload failed`. The destination
is always a directory in our usage, so the probe serves no purpose;
suppress it with --s3-no-head-object.

Verified locally against internal.juliahub.com with Rclone_jll v1.73.5:
the live datasets testset now passes end-to-end, where it previously
failed at datasets-live.jl:70 (BlobTree upload). The flag has existed in
rclone since v1.55 (2021), so no compat impact.
@lamdor lamdor requested review from mortenpi and pfitzseb April 30, 2026 00:13
@pfitzseb pfitzseb merged commit 6f39c1b into main Apr 30, 2026
29 of 36 checks passed
@pfitzseb pfitzseb deleted the la/rclone-no-head-object branch April 30, 2026 08:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants